home *** CD-ROM | disk | FTP | other *** search
/ Scene 96 / Scene 96 International Edition (Zyklop Software) (Disc 2) (1997).iso / misc / coding / cp2dekit / samples / wavpasm.asm < prev    next >
Assembly Source File  |  1996-10-26  |  2KB  |  116 lines

  1. .386
  2. .model flat,prolog
  3. locals
  4.  
  5. .code
  6.  
  7. blockbeg6b macro exp
  8. blockexp=exp
  9. blocksize=(1 shl exp)
  10.   push ecx
  11.   and ecx,blocksize-1
  12.   sub ecx,blocksize
  13.   neg ecx
  14.   sub esi,ecx
  15.   sub esi,ecx
  16.   sub esi,ecx
  17.   sub esi,ecx
  18.   sub edi,ecx
  19.   sub edi,ecx
  20.   sub edi,ecx
  21.   sub edi,ecx
  22.   mov eax,(@@blockend-@@block) shr blockexp
  23.   mul cl
  24.   add eax,offset @@block
  25.   pop ecx
  26.   shr ecx,blockexp
  27.   inc ecx
  28.   jmp eax
  29.   ret
  30. @@block:
  31. endm
  32.  
  33. blockend6b macro
  34. @@blockend:
  35.   add esi,blocksize*4
  36.   add edi,blocksize*4
  37.   dec ecx
  38.   jnz @@block
  39. endm
  40.  
  41. public mixClipAlt2_
  42. mixClipAlt2_ proc ;//esi=src, edi=dst, ebx=tab, ecx=len
  43.   i=0
  44.   push ebp
  45.   xor edx,edx
  46.   blockbeg6b 4
  47.     nop
  48.     nop
  49.     rept blocksize
  50.       mov dl,[esi+i+1]
  51.       mov ebp,[ebx+4*edx]
  52.       mov eax,[ebx+2*edx+1024]
  53.       mov dl,[esi+i]
  54.       add eax,[ebp+2*edx]
  55.       mov [edi+i],ax
  56.       i=i+4
  57.     endm
  58.   blockend6b
  59.   pop ebp
  60.   ret
  61. endp
  62.  
  63. blockbeg6 macro exp
  64. blockexp=exp
  65. blocksize=(1 shl exp)
  66.   push ecx
  67.   and ecx,blocksize-1
  68.   sub ecx,blocksize
  69.   neg ecx
  70.   sub esi,ecx
  71.   sub esi,ecx
  72.   sub edi,ecx
  73.   sub edi,ecx
  74.   mov eax,(@@blockend-@@block) shr blockexp
  75.   mul cl
  76.   add eax,offset @@block
  77.   pop ecx
  78.   shr ecx,blockexp
  79.   inc ecx
  80.   jmp eax
  81.   ret
  82. @@block:
  83. endm
  84.  
  85. blockend6 macro
  86. @@blockend:
  87.   add esi,blocksize*2
  88.   add edi,blocksize*2
  89.   dec ecx
  90.   jnz @@block
  91. endm
  92.  
  93. public mixClipAlt_
  94. mixClipAlt_ proc ;//esi=src, edi=dst, ebx=tab, ecx=len
  95.   i=0
  96.   push ebp
  97.   xor edx,edx
  98.   blockbeg6 4
  99.     nop
  100.     nop
  101.     rept blocksize
  102.       mov dl,[esi+i+1]
  103.       mov ebp,[ebx+4*edx]
  104.       mov eax,[ebx+2*edx+1024]
  105.       mov dl,[esi+i]
  106.       add eax,[ebp+2*edx]
  107.       mov [edi+i],ax
  108.       i=i+2
  109.     endm
  110.   blockend6
  111.   pop ebp
  112.   ret
  113. endp
  114.  
  115. end
  116.